package exception;

import java.util.Arrays;

/**
 * JAVA 异常处理机制
 * java.lang.Throwable是所有异常的超类，下面派生了两个子类型:
 * Exception:一般表示程序出现的异常，是可恢复的异常。
 * Error:一般表示系统级别的错误，不可恢复。
 * 异常处理机制通常不关心Error。
 * <p>
 * 异常处理机制:
 * try{
 * 代码片段
 * }catch(XXXException e){
 * try中出现XXXException后的处理代码
 * }
 */

public class TryCatchDemo {
    public static void main(String[] args) {
        System.out.println("程序开始; ");
        //异常处理机制是解决明知道运行可能出现错误但是无法通过逻辑避免的问题(例如断网)
        try {
            //String  i=null;
            //String i = "";
            String i = "a";
            System.out.println(i.length());
            System.out.println(i.charAt(0));
            System.out.println(Integer.parseInt(i));//把"a"以int输出 报错a不能自动拆装箱
            System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

        } catch (NullPointerException | StringIndexOutOfBoundsException e) { //当多个异常具有相同解决办法时可以合并在一个catch中解决
            System.out.println("出现了空指针或者字符下标越界异常并且解决了!");
        } catch (Exception o) { //使用超类异常可以捕获所有它的子类型异常。如果子类和超类分别有catch的话先先捕获子类型。
            System.out.println("出现没见过的异常了");
        }
//       }catch (NullPointerException e){
//           System.out.println("出现了空指针异常并且已经解决了!");
//       }catch (StringIndexOutOfBoundsException s){
//           System.out.println("出现了字符串下标越界异常并且已经解决了!");
//       }

        System.out.println("程序结束!");

    }
}
